from django.core.management.base import BaseCommand
from django.db import transaction
from django.contrib.auth.hashers import make_password
from role.models import SysRole
from user.models import SysUser
from role.models import SysUserRole


class Command(BaseCommand):
    help = '初始化系统数据，创建超级管理员账号（仅在系统无任何账号时执行）'

    def add_arguments(self, parser):
        parser.add_argument(
            '--admin-username',
            type=str,
            default='admin',
            help='超级管理员用户名，默认为admin'
        )
        parser.add_argument(
            '--admin-password',
            type=str,
            default='123456',
            help='超级管理员密码，默认为123456'
        )

    def handle(self, *args, **options):
        """
        执行系统初始化
        """
        # 检查系统中是否已存在用户
        if SysUser.objects.exists():
            self.stdout.write(
                self.style.WARNING('系统中已存在用户，跳过初始化')
            )
            return

        try:
            with transaction.atomic():
                self.stdout.write('开始初始化系统数据...')
                
                # 创建超级管理员角色（如果不存在）
                super_admin_role, role_created = SysRole.objects.get_or_create(
                    name='超级管理员',
                    defaults={
                        'description': '系统超级管理员，拥有所有权限',
                        'sort': 1,
                        'status': 0
                    }
                )
                
                if role_created:
                    self.stdout.write('  创建超级管理员角色')
                else:
                    self.stdout.write('  超级管理员角色已存在')
                
                # 创建超级管理员用户
                admin_username = options['admin_username']
                admin_password = options['admin_password']
                
                admin_user = SysUser.objects.create(
                    username=admin_username,
                    password=make_password(admin_password),
                    nickname='超级管理员',
                    email='admin@example.com',
                    status=0  # 正常状态
                )
                
                self.stdout.write(f'  创建超级管理员账号: {admin_username}')
                
                # 为超级管理员用户分配角色
                SysUserRole.objects.create(
                    user_id=admin_user.id,
                    role=super_admin_role
                )
                
                self.stdout.write('  为超级管理员分配角色')
                
                self.stdout.write(
                    self.style.SUCCESS(f'系统初始化完成！\n超级管理员账号: {admin_username}\n密码: {admin_password}')
                )
                
        except Exception as e:
            self.stdout.write(
                self.style.ERROR(f'系统初始化失败: {str(e)}')
            )